package recovery;

import parser.ParserConstants;

public class First {

	static public final RecoverySet classlist = new RecoverySet();

	static public final RecoverySet programa = classlist;
	static public final RecoverySet declaracao = new RecoverySet();
	static public final RecoverySet constantes = new RecoverySet();
	static public final RecoverySet tipo = new RecoverySet();
	static public final RecoverySet listaConstantes = new RecoverySet();
	static public final RecoverySet listaVariaveis = new RecoverySet();
	static public final RecoverySet valor = new RecoverySet();
	static public final RecoverySet identificador = new RecoverySet();
	static public final RecoverySet variaveis = new RecoverySet();
	static public final RecoverySet comandos = new RecoverySet();
	static public final RecoverySet comando = new RecoverySet();
	static public final RecoverySet comandos_l = new RecoverySet();
	static public final RecoverySet atribuicao = new RecoverySet();
	static public final RecoverySet entrada = new RecoverySet();
	static public final RecoverySet saida = new RecoverySet();
	static public final RecoverySet listaSaida = new RecoverySet();
	static public final RecoverySet listaSaida_l = new RecoverySet();
	static public final RecoverySet selecao = new RecoverySet();
	static public final RecoverySet senao = new RecoverySet();
	static public final RecoverySet repeticao = new RecoverySet();
	static public final RecoverySet expressao = new RecoverySet();
	static public final RecoverySet expressaoAL = new RecoverySet();
	static public final RecoverySet expressao_l = new RecoverySet();
	static public final RecoverySet termo2 = new RecoverySet();
	static public final RecoverySet termo1 = new RecoverySet();
	static public final RecoverySet elemento = new RecoverySet();
	static public final RecoverySet menorPrioridade = new RecoverySet();
	static public final RecoverySet mediaPrioridade = new RecoverySet();
	static public final RecoverySet maiorPrioridade = new RecoverySet();

	static {

		programa.add(new Integer(ParserConstants.P_PROGRAMA));

		// declaracao
		constantes.add(new Integer(ParserConstants.P_CONSTANTES));
		variaveis.add(new Integer(ParserConstants.P_VARIAVEIS));
		declaracao.addAll(constantes);
		declaracao.add(variaveis);
		tipo.add(ParserConstants.P_INTEIRO);
		tipo.add(ParserConstants.P_REAL);
		tipo.add(ParserConstants.P_LITERAL);
		tipo.add(ParserConstants.P_LOGICO);
		listaConstantes.addAll(tipo);
		listaVariaveis.addAll(tipo);

		// valor
		valor.add(ParserConstants.DIGITO);
		valor.add(ParserConstants.ASPAS);
		valor.add(ParserConstants.APOSTOFRO);
		valor.add(ParserConstants.P_VERDADEIRO);
		valor.add(ParserConstants.P_FALSO);

		// atribuicao
		atribuicao.add(new Integer(ParserConstants.LETRA));
		atribuicao.add(new Integer(ParserConstants.DIGITO));
		atribuicao.add(new Integer(ParserConstants.ASPAS));
		atribuicao.add(new Integer(ParserConstants.P_VERDADEIRO));
		atribuicao.add(new Integer(ParserConstants.P_FALSO));
		atribuicao.add(new Integer(ParserConstants.S_ABRE_PARENTESE));
		atribuicao.add(new Integer(ParserConstants.P_NAO));

		// entrada
		entrada.add(new Integer(ParserConstants.P_LEIA));

		// saida
		saida.add(new Integer(ParserConstants.P_ESCREVA));
		listaSaida.add(new Integer(ParserConstants.LETRA));
		listaSaida.addAll(valor);
		listaSaida_l.add(new Integer(ParserConstants.S_VIRGULA));

		// selecao
		selecao.add(new Integer(ParserConstants.P_SE));
		senao.add(new Integer(ParserConstants.P_SENAO));

		// repeticao
		repeticao.add(new Integer(ParserConstants.P_ENQUANTO));

		expressao_l.add(new Integer(ParserConstants.S_IGUAL));
		expressao_l.add(new Integer(ParserConstants.S_MENOR_MAIOR));
		expressao_l.add(new Integer(ParserConstants.S_MENOR));
		expressao_l.add(new Integer(ParserConstants.S_MAIOR));
		expressao_l.add(new Integer(ParserConstants.S_MENOR_IGUAL));
		expressao_l.add(new Integer(ParserConstants.S_MAIOR_IGUAL));

		elemento.add(new Integer(ParserConstants.LETRA));
		elemento.add(new Integer(ParserConstants.DIGITO));
		elemento.add(new Integer(ParserConstants.ASPAS));
		elemento.add(new Integer(ParserConstants.P_VERDADEIRO));
		elemento.add(new Integer(ParserConstants.P_FALSO));
		elemento.add(new Integer(ParserConstants.S_ABRE_PARENTESE));
		elemento.add(new Integer(ParserConstants.P_NAO));
		elemento.add(new Integer(ParserConstants.S_ABRE_PARENTESE));
		elemento.add(new Integer(ParserConstants.P_NAO));

		menorPrioridade.add(new Integer(ParserConstants.S_SOMA));
		menorPrioridade.add(new Integer(ParserConstants.S_SUBTRACAO));
		menorPrioridade.add(new Integer(ParserConstants.P_OU));

		mediaPrioridade.add(new Integer(ParserConstants.S_MULTIPLICACAO));
		mediaPrioridade.add(new Integer(ParserConstants.S_DIVISAO));
		mediaPrioridade.add(new Integer(ParserConstants.S_DIVISAO_INTEIRA));
		mediaPrioridade
				.add(new Integer(ParserConstants.S_RESTO_DIVISAO_INTEIRA));
		mediaPrioridade.add(new Integer(ParserConstants.P_E));

		maiorPrioridade.add(new Integer(ParserConstants.S_POTENCIA));

		termo1.addAll(elemento);
		termo2.addAll(termo1);
		expressaoAL.addAll(termo2);
		expressao.addAll(expressaoAL);

		// comando
		comando.add(atribuicao);
		comando.add(entrada);
		comando.add(saida);
		comando.add(selecao);
		comando.add(repeticao);

		comandos.addAll(comando);
		comandos_l.addAll(comando);
	}

}
